home *** CD-ROM | disk | FTP | other *** search
/ Software USA 3 #11 / Software USA Volume 3.11.iso / mac / Games / World Builder / Documentation / Advanced Code / AMOT "Seep" Code < prev    next >
Text File  |  1995-11-28  |  12KB  |  189 lines

  1.  
  2. Advanced World Builder Programming, Part Two
  3.                              by Ray Dunakin
  4.  
  5. The code in this section is taken from the scene titled "Seep" in my game "A Mess O'Trouble".
  6.  
  7. In this scene, the player is in a mine tunnel. The tunnel is not lighted, and there is a shaft going down. Depending on whether the water pump in another scene has been used or not, there may be water in the shaft. 
  8.  
  9. IF{LOOP#=0}THEN
  10.     IF{W4#<1}THEN
  11.         MOVE{SEEP.WATER}TO{SCENE@}
  12.     END
  13.     IF{W4#=1}THEN
  14.         MOVE{SEEP.WATER}TO{STORAGE@}
  15.     END
  16.     LET{H1#=H1#-1}
  17.     LET{H2#=H2#-1}
  18.     LET{H3#=H3#-1}
  19. END
  20.  
  21. This code is activated when the player first enters the scene (loop# 0). The first two conditional IF/THEN statements check the status of user variable W4. If W4 is less than (<) 1, it means the water pump has not been used, so the drawing depicting a flooded shaft is moved to the scene. Why did I write it as "less than 1" instead of "equals zero"? Because until a user variable has actually been set, it doesn't exist, not even as zero. So an unset variable does NOT equal zero, however it IS less than one. In such cases, the program reads "less than" as "not equal to". If the variable does not yet exist, it is not equal to one, or any other number. 
  22.  
  23. When the player uses the water pump (in another scene), variable W4 is set to 1. This tells the program that the water has been pumped out of the shaft, and so, when the player enters the scene, it moves the flooded shaft drawing (SEEP.WATER object) to storage.
  24.  
  25. The remaining part of this bit of code updates the hunger/thirst/sleep variables, as discussed in Part One of this series.
  26.  
  27.  
  28.  
  29. IF{LOOP#=0}OR{TEXT$=LOOK}THEN
  30.     IF{FLASHLIGHT>PLAYER@}OR{F1#<1}THEN
  31.         MOVE{DARK}TO{SCENE@}
  32.         PRINT{It is very dark here.}
  33.     EXIT
  34.     IF{TEXT$=WATER}OR{TEXT$=POOL}OR{TEXT$=SHAFT}THEN
  35.         PRINT{...................................}
  36.         PRINT{You can't see much in the depths of the water.}
  37.     EXIT
  38.     MOVE{DARK}TO{STORAGE@}
  39.     PRINT{Your flashlight dispels the darkness.}
  40.     PRINT{.....................................}
  41.     PRINT{You have reached the end of this tunnel.}
  42.     IF{SEEP.WATER=SCENE@}THEN
  43.         PRINT{Water is seeping in through the rocks, forming a small pool at your feet.}
  44.     END
  45.     IF{SEEP.WATER>SCENE@}THEN
  46.         PRINT{There is a deep, narrow shaft here, with a rusty iron ladder going DOWN.}
  47.     END
  48.     PRINT{....................................}
  49.     PRINT{The shaft is to the NORTH.}
  50.     PRINT{....................................}
  51.     IF{JUMPDOOR.1=SCENE@}THEN
  52.         PRINT{There is a Jump Door to the EAST.}
  53.         PRINT{.....................................}
  54.     END
  55.     PRINT{You are facing SOUTH.}
  56.     IF{LOOP#=0}THEN
  57.         LET{F1#=F1#-1}
  58.     END
  59. END
  60.  
  61. The next section of code handles the scene description. Because there are several ways the appearance of the scene may vary, the description can't simply be written into the scene text window. The beginning IF/THEN statement allows this code to be run when the player first enters the scene, or anytime the player asks for a description of the scene using the LOOK command. There is also a nested statement farther down that handles player requests to look in the water.
  62.  
  63. The first nested condition checks to see if the player has the flashlight, and if the batteries in the flashlight have not run down. Variable F1 keeps track of the battery power. If either of these conditions is negative (no flashlight, OR no battery power) then a solid black object called DARK is moved to the scene, and no scene description is given, only a notice that it is "very dark here".
  64.  
  65. If both conditions are positive (player has flashlight, AND batteries still have power) then the next thing the program checks is whether the player is asking to LOOK in the WATER (or pool, or shaft). If so, it gives a description of what the player sees in the water. Notice that the way this is set up, if the player tried to look in the water when the scene is dark, he wouldn't get past the first statement, which would just tell him it's dark here.
  66.  
  67. If the player has the flashlight, battery power, and isn't asking to look in the water, then the program runs past a line of code that moves the DARK to storage. This would happen before the scene is displayed as the player first enters the scene. You could add a statement testing whether the DARK was in the seen each time the player LOOKS, but that wouldn't be necessary. If the DARK is not in the scene, and is already in storage, then the program will ignore that line anyway. 
  68.  
  69. Now the program prints the scene description, beginning with a notice that his flashlight "dispells the darkness". This is just to let him know that the scene would be dark without the flashlight. Nested in the scene description is a pair of statements that determine whether the shaft is flooded or not, and printing the appropriate text. A Jump Door may also be visible in this scene, so another statement checks for the presence of the Jump Door object in the scene, and prints the text for that.
  70.  
  71. The final nested condition reduces the battery power, variable F1, by one if the loop number is 0. In this way, each time the player enters a scene that requires the flashlight, his available supply of battery power is reduced one point. When the battery power is less than one, his flashlight no longer works.
  72.  
  73. I closed this section of code with END. This allows World Builder to print any additional scene text, mainly the names of any loose mobile objects that may be in the scene. 
  74.  
  75.  
  76.  
  77. IF{TEXT$=USE FLASHLIGHT}AND{F1#<1}THEN
  78.     PRINT{Your flashlight needs new batteries.}
  79. EXIT
  80.  
  81. If the player is in the dark because his batteries have "run down", and he enters USE FLASHLIGHT, this code lets him know that he needs new batteries. I could have put this in the global code, but to save space there I put it into scene code instead.
  82.  
  83.  
  84.  
  85. IF{TEXT$=GET}AND{TEXT$=WATER}THEN
  86.     PRINT{.......................................}
  87.     PRINT{Do you want to DRINK? Or do you want to FILL CANTEEN?}
  88. EXIT
  89.  
  90. Since the player can either drink water directly from the flooded shaft, or from his canteen; or can fill his canteen with the water from the shaft, this code asks for more specific directions if the player should enter GET WATER.
  91.  
  92.  
  93.  
  94. IF{TEXT$=SEARCH}THEN
  95.     PRINT{......................................}
  96.     MOVE{JUMPDOOR.1}TO{SCENE@}
  97.     PRINT{A Jump Door opens to the EAST.}
  98.     PRINT{......................................}
  99.     IF{DARK=SCENE@}THEN
  100.         PRINT{It is too dark to see. As you feel around in the darkness you discover a small pool of fresh water.}
  101.     EXIT
  102. END
  103.  
  104. This is the search code. A nested condition checks to see if the scene is DARK, and prints the text for that situation. Unlike most things, Jump Doors can be found by searching even when the scene is dark, so that part of the code comes first. And since there isn't anything else to be found here, the code closes with END, allowing the program to continue to a default response in the global code: "You find nothing unusual."
  105.  
  106.  
  107.  
  108. IF{TEXT$=FILL}AND{TEXT$=CANTEEN}THEN
  109.     PRINT{......................................}
  110.     IF{SEEP.WATER=SCENE@}THEN
  111.         IF{CANTEEN=PLAYER@}THEN
  112.             LET{W1#=2}
  113.             SOUND{BUBBLES}
  114.             PRINT{Your canteen is now full.}
  115.         EXIT
  116.         PRINT{You don't have a canteen.}
  117.     EXIT
  118.     PRINT{The shaft has been drained. The only water left is at the bottom of the shaft.}
  119. EXIT
  120.  
  121. This section handles the request to "fill canteen". Since there is water here only when the shaft is flooded, a nested condtional statement checks for that. 
  122.  
  123. User variable W1 keeps track of the water in the player's canteen. It hold enough for two drinks, so when the canteen is filled, the variable is set to 2. A section of the global code reduces the variable by 1 point each time the player drinks from the canteen, and tells the player it's empty if the variable is less than 1.
  124.  
  125.  
  126.  
  127. IF{TEXT$=DRINK}THEN
  128.     PRINT{....................................}
  129.     IF{SEEP.WATER=SCENE@}THEN
  130.         LET{H2#=90}
  131.         SOUND{SPLASH}
  132.         PRINT{The pool's clear sweet water quenches your thirst.}
  133.     EXIT
  134.     PRINT{The shaft has been drained. The only water left is at the bottom of the shaft.}
  135. EXIT
  136.  
  137. Normally the DRINK command is handled by the global code mentioned above. But in places where water is available, it is assumed that the player would want to drink from the local source, and save what's in his canteen for later. Here, if the shaft is flooded, the player's thirst is quenched by setting the thirst variable, H2, to 90. In most cases, the statement would close with END, allowing the program to continue to the global code so the player could drink from his canteen when the shaft has been drained. However, in this case I wanted to make it clear that the water that was here has been pumped out. The player can simply go to the bottom of the shaft and drink from the remaining liquid there, or go to the next scene and drink from his canteen.
  138.  
  139.  
  140.  
  141. IF{TEXT$=EAST}AND{JUMPDOOR.1=SCENE@}THEN
  142.     IF{DYNAMITE=PLAYER@}THEN
  143.         PRINT{Your dynamite begins to grow warm and vibrate as you move towards the Jump Door. The peculiar energy of the Jump Door must be affecting it!}
  144.     EXIT
  145.     SOUND{ZAP.1}
  146.     MOVE{PLAYER@}TO{MONOLITH VALLEY}
  147. EXIT
  148.  
  149. This code moves the player through the Jump Door when he enters EAST and the jump door is in the scene. But first it checks to see if he is carrying the dynamite, and stops him if he is. Since the dynamite was intended to be used with a specific puzzle in this world, and was not to be used in other worlds for other puzzles, I needed a logical way to prevent the player from taking it out of this world. In this case, the possibilty that the peculiar forces of the Jump Door might adversely affect the explosive seemed reasonable enough. And since I didn't want to just have it blow up and kill the player without warning  as he goes through the door, I had the dynamite "warm up" as he "moves toward the Jump Door." 
  150.  
  151. Without the dynamite, the program plays the proper sound, and moves the player to the designated scene.
  152.  
  153.  
  154.  
  155. IF{TEXT$=SWIM}OR{TEXT$=DIVE}OR{TEXT$=DOWN}THEN
  156.     PRINT{.......................................}
  157.     IF{SEEP.WATER=SCENE@}THEN
  158.         IF{F2#=1}THEN
  159.             PRINT{FRANK: "No way, pal! That flooded shaft is too dangerous!"}
  160.         EXIT
  161.         IF{F2#=2}THEN
  162.             PRINT{DAWN: "Forget it, buster! That flooded shaft is too dangerous!"}
  163.         EXIT
  164.     EXIT
  165. END
  166.  
  167. Anyplace where there is a body of water larger than a bucket, some player will try to swim in it. And here, going down is treated the same as swimming when the shaft is flooded, since that's the only way you could go down then. 
  168.  
  169. In this game, the player is given a choice between two player characters, Fearless Frank or Daredevil Dawn. Variable F2 keeps track of this choice, which is set at the beginning of the game. In places where the response comes directly from the player character, a pair of nested conditional statements check the variable to determine which character the player is using, and then prints the response for that character.
  170.  
  171.  
  172.  
  173. IF{TEXT$=DOWN}OR{TEXT$=CLIMB}OR{TEXT$=USE LADDER}THEN
  174.     IF{SEEP.WATER>SCENE@}THEN
  175.         MOVE{PLAYER@}TO{SOGGY SHAFT}
  176.     EXIT
  177. END
  178.  
  179. This checks to see if the shaft has been pumped out, then moves the player to the bottom of the shaft when the player enters DOWN, CLIMB or USE LADDER.
  180.  
  181.  
  182.  
  183. IF{CLICK$=SEEP.WATER}OR{CLICK$=SEEP.SHAFT}THEN
  184.     PRINT{.......................................}
  185. END
  186.  
  187.  
  188. This just prints a dotted line prior to the object description when these objects are clicked on, as mentioned in Part One.
  189.